package br.com.hstar.client.fornecedor;

import br.com.hstar.client.ServiceFactory;
import br.com.hstar.client.util.FormPanel;
import br.com.hstar.client.util.HstarDialogBox;
import br.com.hstar.client.util.HstarUserException;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

public class FornecedorEditPanel extends FormPanel {

	private Button incluir;
	private Button cancelar;
	private Button excluir;
	
    private TextBox nome;
    private TextBox contato;
    private TextBox logradouro;
    private TextBox numero;
    private TextBox complemento;
    private TextBox bairro;
    private TextBox cidade;
    private TextBox estado;
    private TextBox cep;
    private TextBox telefone;
    private TextBox fax;
    private TextBox email;
    private TextBox cnpj;
    private TextBox inscricaoEstadual;
    private TextArea observacao;
	private FornecedorUI fornecedorUI;

	public FornecedorEditPanel(String _title) {
		super(_title);
		fornecedorUI = new FornecedorUI();
		init(true);
	}
	
	public FornecedorEditPanel(String _title, Long id) {
		super(_title);
		fornecedorUI = new FornecedorUI();
		fornecedorUI.setId(id);
		init(false);
		ServiceFactory.createFornecedorService().retrieveById(id, new RetrieveAsyncCallback());
	}
	
	
	
	//Methods -------------------------------------------------------------------
	
	private void init(boolean isNew) {

		nome 		= addTextBox("Nome", 30, 35, "");
	    contato 	= addTextBox("Contato", 30, 35, "");
	    logradouro 	= addTextBox("Logradouro", 30, 35, "");
	    numero 		= addTextBox("Número", 30, 35, "");
	    complemento = addTextBox("Complemento", 30, 35, "");
	    bairro 		= addTextBox("Bairro", 30, 35, "");
	    cidade 		= addTextBox("Cidade", 30, 35, "");
	    estado 		= addTextBox("Estado", 30, 35, "");
	    cep 		= addTextBox("CEP", 30, 35, "");
	    telefone 	= addTextBox("Telefone", 30, 35, "");
	    fax 		= addTextBox("FAX", 30, 35, "");
	    email 		= addTextBox("E-mail", 30, 35, "");
	    cnpj 		= addTextBox("CNPJ", 30, 35, "");
	    inscricaoEstadual = addTextBox("Insc. Estadual", 30, 35, "");
	    observacao 	= addTextArea("Observação", "250", "150", "");
		
		
		if(isNew) {
			incluir  = addButton("Incluir");
			cancelar = addButton("Cancelar");
		} else {
			incluir  = addButton("Alterar");
			cancelar = addButton("Cancelar");
			excluir = addButton("Excluir");
			excluir.addClickListener(new ClickListener() {
				public void onClick(Widget sender) {
					ServiceFactory.createFornecedorService().delete(fornecedorUI.getId(), new DeleteAsyncCallback());
				}
			});
		}
		
		incluir.addClickListener(new ClickListener() {
			public void onClick(Widget sender) {
				 
				try {
					copyData();
					ServiceFactory.createFornecedorService().saveOrUpdate(fornecedorUI, new SaveAsyncCallback());
				} catch (HstarUserException e) {
					new HstarDialogBox("Fornecedor",e.getMessage());					
				}				 
				
			}
		});
		cancelar.addClickListener(new ClickListener() {
			public void onClick(Widget sender) {
				RootPanel.get("boxContent").clear();
				RootPanel.get("boxContent").add(new FornecedorListPanel("Fornecedor"));
			}
		});
		
	}

	private void copyData() throws HstarUserException {

		String msgErro = "";
		
		if(nome.getText().trim() == "")
		{
			msgErro += " - Digite o nome do fornecedor. <br>";		
		}
		
		if(logradouro.getText().trim() == "")
		{
			msgErro += " - Digite o logradouro do fornecedor. <br>";
		}
		
		if(numero.getText().trim() == "")
		{
			msgErro += " - Digite o número do logradouro do fornecedor. <br>";
		}
		
		
		if(bairro.getText().trim() == "")
		{
			msgErro += " - Digite o bairro do fornecedor. <br>";
		}
		
		
		if(cidade.getText().trim() == "")
		{
			msgErro += " - Digite a cidade do fornecedor. <br>";
		}
		
		
		if(estado.getText().trim() == "")
		{
			msgErro += " - Digite o estado do fornecedor. <br>";
		}
		
		if(telefone.getText().trim() == "")
		{
			msgErro += " - Digite o telefone do fornecedor. <br>";
		}
		
		
		if(msgErro != "")
		{
			throw new HstarUserException(msgErro);
		}
		
		fornecedorUI.setNome(nome.getText().trim());
		fornecedorUI.setContato(contato.getText().trim());
		fornecedorUI.setLogradouro(logradouro.getText().trim());
		fornecedorUI.setNumero(numero.getText().trim());
		fornecedorUI.setComplemento(complemento.getText().trim());
		fornecedorUI.setBairro(bairro.getText().trim());
		fornecedorUI.setCidade(cidade.getText().trim());
		fornecedorUI.setEstado(estado.getText().trim());
		fornecedorUI.setCep(cep.getText().trim());
		fornecedorUI.setTelefone(telefone.getText().trim());
		fornecedorUI.setFax(fax.getText().trim());
		fornecedorUI.setEmail(email.getText().trim());
		fornecedorUI.setCnpj(cnpj.getText().trim());
		fornecedorUI.setInscricaoEstadual(inscricaoEstadual.getText().trim());
		fornecedorUI.setObservacao(observacao.getText().trim());
	}

	// INNER CLASSES ----------------------------------------------------------------
	private class SaveAsyncCallback implements AsyncCallback {
		public void onFailure(Throwable caught) {
			if(caught instanceof HstarUserException)
			{					
				new HstarDialogBox("Fornecedor",caught.getMessage());
			}
		}

		public void onSuccess(Object result) {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new FornecedorListPanel("Fornecedor"));
		}
	}
	
	private class DeleteAsyncCallback implements AsyncCallback {
		public void onFailure(Throwable caught) {
			Window.alert("ERRO - Fornecedor edit panel");
		}

		public void onSuccess(Object result) {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new FornecedorListPanel("Fornecedor"));
		}
	}
	
	//carrega os campos. Usado para quando está editando
	private class RetrieveAsyncCallback implements AsyncCallback {
		public void onFailure(Throwable caught) {
			Window.alert("ERRO - Fornecedor edit panel");
		}

		public void onSuccess(Object result) {
			FornecedorUI fornecedor = (FornecedorUI)result;

			nome.setText(fornecedor.getNome().trim());
			contato.setText(fornecedor.getContato().trim());
			logradouro.setText(fornecedor.getLogradouro().trim());
			numero.setText(fornecedor.getNumero().trim());
			complemento.setText(fornecedor.getComplemento().trim());
			bairro.setText(fornecedor.getBairro().trim());
			cidade.setText(fornecedor.getCidade().trim());
			estado.setText(fornecedor.getEstado().trim());
			cep.setText(fornecedor.getCep().trim());
			telefone.setText(fornecedor.getTelefone().trim());
			fax.setText(fornecedor.getFax().trim());
			email.setText(fornecedor.getEmail().trim());
			cnpj.setText(fornecedor.getCnpj().trim());
			inscricaoEstadual.setText(fornecedor.getInscricaoEstadual().trim());
			observacao.setText(fornecedor.getObservacao().trim());
		}
	}
}      